package cl.hhha.web.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.ManyToOne;
import javax.persistence.Transient;

/**
 * modela una dirección
 * @author Óscar Álvarez V
 * @email oialvarez@gmail.com
 * @Version 1.0
 * @date 24-06-2009 14:17:51
 */
@Embeddable
public class Direccion extends BaseObject implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@Transient
	private Boolean seleccionado;
	
	@Column(length=50, nullable=false)
	private String calle;
	
	@Column(length=10, nullable=false)
	private Integer numeroCalle;
	
	@Column(length=50)
	private String poblacion;
	
	@Column(length=8)
	private String bloc;
	
	@Column(length=5)
	private Integer numeroDepartamento;
	
	@Column(length=50, nullable=false)
	private String ciudad;
	
	@ManyToOne(optional=false)
	private Comuna comuna;
	
	
	
	/**
	 * @return the seleccionado
	 */
	public Boolean estaSeleccionado() {
		return seleccionado;
	}

	/**
	 * @param seleccionado the seleccionado to set
	 */
	public void setSeleccionado(Boolean seleccionado) {
		this.seleccionado = seleccionado;
	}
	
	
	/**
	 * @return the calle
	 */
	public String getCalle() {
		return calle;
	}

	/**
	 * @param calle the calle to set
	 */
	public void setCalle(String calle) {
		this.calle = calle;
	}

	/**
	 * @return the numeroCalle
	 */
	public Integer getNumeroCalle() {
		return numeroCalle;
	}

	/**
	 * @param numeroCalle the numeroCalle to set
	 */
	public void setNumeroCalle(Integer numeroCalle) {
		this.numeroCalle = numeroCalle;
	}

	/**
	 * @return the comuna
	 */
	public Comuna getComuna() {
		return comuna;
	}

	/**
	 * @param comuna the comuna to set
	 */
	public void setComuna(Comuna comuna) {
		this.comuna = comuna;
	}
	
	/**
	 * @return the poblacion
	 */
	public String getPoblacion() {
		return poblacion;
	}

	/**
	 * @param poblacion the poblacion to set
	 */
	public void setPoblacion(String poblacion) {
		this.poblacion = poblacion;
	}

	/**
	 * @return the bloc
	 */
	public String getBloc() {
		return bloc;
	}

	/**
	 * @param bloc the bloc to set
	 */
	public void setBloc(String bloc) {
		this.bloc = bloc;
	}

	/**
	 * @return the numeroDepartamento
	 */
	public Integer getNumeroDepartamento() {
		return numeroDepartamento;
	}

	/**
	 * @param numeroDepartamento the numeroDepartamento to set
	 */
	public void setNumeroDepartamento(Integer numeroDepartamento) {
		this.numeroDepartamento = numeroDepartamento;
	}

	/**
	 * @return the ciudad
	 */
	public String getCiudad() {
		return ciudad;
	}

	/**
	 * @param ciudad the ciudad to set
	 */
	public void setCiudad(String ciudad) {
		this.ciudad = ciudad;
	}

	/**
	 * @return the seleccionado
	 */
	public Boolean getSeleccionado() {
		return seleccionado;
	}

	@Override
	public boolean equals(Object o) {
		if(o == this){
			return true;
		}
		
		if(o instanceof Direccion){
			
			Direccion d = (Direccion)o;
			
			Boolean lCalle = getCalle() == null ?
					d.getCalle() == null : getCalle().equals(d.getCalle());
			
			Boolean lNumeroCalle = getNumeroCalle() == null ?
					d.getNumeroCalle() == null : getNumeroCalle().equals(d.getNumeroCalle());
			
			Boolean lComuna = getComuna() == null ?
					d.getComuna() == null : getComuna().equals(d.getComuna());			
			
			return lCalle && lNumeroCalle && lComuna;
		}
		
		return false;
	}

	@Override
	public int hashCode() {
		Integer hash = getCalle() == null ? 0 : getCalle().hashCode() << 1;
		hash += getNumeroCalle() == null ? 0 : getNumeroCalle().hashCode() << 1;
		hash += getComuna() == null ? 0 : getComuna().hashCode() << 1;
		return hashCode();
	}

	@Override
	public String toString() {
		return comuna + " " + calle + " " + numeroCalle;
	}

}
